﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using GSQ.BusinessEntities;
using GSQ.BusinessLogic;
using Telerik.WinControls.UI;
namespace UIapp.Dialogos
{
    public partial class frmRecibosPagos : Plantillas.frmDialogPlantilla, Interfaces.IPantalla
    {
        public frmRecibosPagos()
        {
            InitializeComponent();
            this.radWizard1.HelpButton.Visibility = Telerik.WinControls.ElementVisibility.Hidden;
            this.radWizard1.NextButton.Text = "&Siguiente >";
            this.radWizard1.FinishButton.Text = "&Finalizar";
            this.radWizard1.BackButton.Text = "< &Anterior";
            this.radWizard1.CancelButton.Text = "&Cancelar";
            this.dtpFecha.Value = new UtilidadesBL().GetDate();
            this.newEntity = new RECIBOS_PAGOS();
            this.reImprimirToolStripMenuItem.Image = new System.Drawing.Bitmap(Comun.systemConfig.RUTA_IMAGENES + "printer.png");
            this.verEnPantallaToolStripMenuItem.Image = new System.Drawing.Bitmap(Comun.systemConfig.RUTA_IMAGENES + "printDisplay.png");
            this.ctrPrintTo1.Load(this.Name);
        }

        #region Variables
        CLIENTES cliente;
        VENDEDORES vendedor;
        List<FACTURAS> facturasPendientes = new List<FACTURAS>();
        List<FACTURAS> facturasPagar = new List<FACTURAS>();
        private RECIBOS_PAGOS newEntity;
        bool entityError = false;

        #endregion

        #region Implementacion IPantalla
        public int ComandosSoportados
        {
            get { return 0; }
        }

        public void Nuevo()
        {
            throw new NotImplementedException();
        }

        public void Modificar()
        {
            throw new NotImplementedException();
        }

        public void Eliminar()
        {
            throw new NotImplementedException();
        }

        public void Refrescar()
        {
            throw new NotImplementedException();
        }

        public void Buscar()
        {
            throw new NotImplementedException();
        }

        public void AgregarProducto(Controles.TransferEntity tranferEntity)
        {
            //foreach (FACTURAS_DETALLES t in this.newEntity.FACTURAS_DETALLES)
            //{
            //    if (t.ID_PRODUCTO == tranferEntity.PRODUCTOS.ID)
            //    {
            //        Comun.ShowInMainMessage("Producto " + tranferEntity.PRODUCTOS.CODIGO + " previamente agregado.");
            //        return;
            //    }
            //}
            //FACTURAS_DETALLES facturaInvDetalle = new FACTURAS_DETALLES();

            //facturaInvDetalle.ID = 0;
            //facturaInvDetalle.ID_PRODUCTO = tranferEntity.PRODUCTOS.ID;
            //facturaInvDetalle.CANTIDAD = tranferEntity.CANTIDAD;
            //facturaInvDetalle.COSTO = tranferEntity.PRODUCTOS.COSTO;
            ////facturaInvDetalle.PRECIO = tranferEntity.COSTO;

            //if (tranferEntity.PRODUCTOS.IMPUESTOS)
            //{
            //    facturaInvDetalle.PRECIO = (tranferEntity.COSTO) / ((Comun.utilidades.X_IMPUESTOS / 100) + 1);
            //    facturaInvDetalle.IMPUESTO = (tranferEntity.COSTO - facturaInvDetalle.PRECIO) * tranferEntity.CANTIDAD;
            //    facturaInvDetalle.X_IMPUESTO = Comun.utilidades.X_IMPUESTOS;
            //}
            //else
            //{
            //    facturaInvDetalle.PRECIO = tranferEntity.COSTO;
            //    facturaInvDetalle.IMPUESTO = 0;
            //    facturaInvDetalle.X_IMPUESTO = 0;
            //}
            //facturaInvDetalle.DESCUENTO = tranferEntity.DESCUENTO;
            //facturaInvDetalle.X_DESCUENTO = (facturaInvDetalle.DESCUENTO / (facturaInvDetalle.CANTIDAD * facturaInvDetalle.PRECIO)) * 100;
            //facturaInvDetalle.C_DEVUELTA = 0;
            //facturaInvDetalle.DESCRIPCIONES = tranferEntity.PRODUCTOS.DESCRIPCIONES;
            //facturaInvDetalle.MEDIDAS = tranferEntity.PRODUCTOS.MEDIDAS;
            //facturaInvDetalle.PRODUCTOS = tranferEntity.PRODUCTOS;
            //if (facturaInvDetalle.IsValid())
            //{
            //    this.newEntity.FACTURAS_DETALLES.Add(facturaInvDetalle);
            //    this.bindingSource.DataSource = this.newEntity.FACTURAS_DETALLES.ToList();
            //    this.CalcularTotales();
            //}
            //else
            //    Comun.ShowMessage(facturaInvDetalle);
        }
        #endregion

        #region Metodos Auxiliares
        private void CalcularTotales()
        {
            //if (this.newEntity.NC_DETALLES.Count > 0)
            //{
            //    decimal Tdescuento = 0, Timpuesto = 0, Stotal = 0, T = 0;
            //    foreach (NC_DETALLES f in this.newEntity.NC_DETALLES)
            //    {
            //        Tdescuento = Tdescuento + f.DESCUENTO;
            //        Timpuesto = Timpuesto + f.IMPUESTO;
            //        Stotal = Stotal + f.SUB_TOTAL_X_PRECIO;
            //        T = (Stotal - Tdescuento) + Timpuesto;

            //    }
            //    this.lblTotalDescuento.Text = Tdescuento.ToString("N2");
            //    this.lblTotalImpuestos.Text = Timpuesto.ToString("N2");
            //    this.lblSubTotal.Text = Stotal.ToString("N2");
            //    this.lblTotalGeneral.Text = T.ToString("N2");
            //}
            //else
            //{
            //    this.lblTotalImpuestos.Text = "0.00";
            //    this.lblTotalDescuento.Text = "0.00";
            //    this.lblSubTotal.Text = "0.00";
            //    this.lblTotalGeneral.Text = "0.00";
            //}
        }

        private void LimpiarAdd()
        {
            //this.txtCodigo.Text = string.Empty;

            //this.lblDescripcion.Text = "___";
            //this.lblPrecio.Text = "0.00";

            //this.txtCantidad.Text = "0.00";

            //this.lblImporte.Text = "0.00";
            //this.txtCodigo.Focus();
        }
        #endregion

        #region Tratamiento de eventos
        private void radWizard1_Next(object sender, Telerik.WinControls.UI.WizardCancelEventArgs e)
        {

            //if (this.radWizard1.SelectedPage.Name == this.wizardPage2.Name && this.entityFactura == null)
            //{
            //    Comun.ShowInMainMessage("Debe seleccionar una factura antes de continuar.");
            //    e.Cancel = true;
            //    return;
            //}

            //if (this.radWizard1.SelectedPage == this.wizardPage2 || this.radWizard1.SelectedPage == this.wizardPage3 || this.radWizard1.SelectedPage == this.wizardPage4)
            //{
            //    e.Cancel = true;

            //}

            //if (this.rdbDevolucion.Checked && this.radWizard1.SelectedPage.Name == this.wizardPage2.Name)
            //{
            //    this.radWizard1.SelectedPage = this.wizardPage3;
            //    return;
            //}

            //else if (this.rdbNotaCredito.Checked && this.radWizard1.SelectedPage.Name == this.wizardPage2.Name)
            //{
            //    this.radWizard1.SelectedPage = this.wizardPage4;
            //    return;
            //}

            //if (this.radWizard1.SelectedPage == this.wizardPage3 || this.radWizard1.SelectedPage == this.wizardPage4)
            //{
            //    if (rdbDevolucion.Checked)
            //    {
            //        if (this.newEntity.NC_DETALLES.Count <= 0)
            //        {
            //            e.Cancel = true;
            //            Comun.ShowInMainMessage("No puede continuar hasta que agregue al menos un producto.");
            //            return;
            //        }
            //    }
            //    else
            //    {
            //        decimal i = 0;
            //        if (!decimal.TryParse(this.txtMontoNotaCredito.Text.Trim(), out i))
            //        {
            //            e.Cancel = true;
            //            Comun.ShowInMainMessage("Solo se permiten números en este campo.");
            //            this.txtMontoNotaCredito.Text = "0.00";
            //            this.txtMontoNotaCredito.SelectAll();
            //            this.txtMontoNotaCredito.Focus();
            //            return;
            //        }
            //        else if (i <= 0)
            //        {
            //            e.Cancel = true;
            //            Comun.ShowInMainMessage("El monto debe ser mayor a cero");
            //            this.txtMontoNotaCredito.SelectAll();
            //            this.txtMontoNotaCredito.Focus();
            //            return;
            //        }
            //        this.txtMontoNotaCredito.Text = decimal.Parse(this.txtMontoNotaCredito.Text.Trim()).ToString("N2");
            //    }
            //    this.lblCliente.Text = string.Format("{0} - {1}", this.entityFactura.ID_CLIENTE.ToString("0000"), this.entityFactura.CLIENTES.CLIENTE);
            //    this.lblNroFactura.Text = this.entityFactura.NRO_FACTURA.ToString();
            //    this.lblCondicion.Text = this.entityFactura.CONDICIONES.CONDICION;
            //    if (rdbDevolucion.Checked)
            //        this.lblMontoDocumento.Text = this.lblTotalGeneral.Text;
            //    else
            //        this.lblMontoDocumento.Text = this.txtMontoNotaCredito.Text;
            //    this.radWizard1.SelectedPage = this.wizardCompletionPage1;
            //}
        }

        private void radWizard1_SelectedPageChanged(object sender, Telerik.WinControls.UI.SelectedPageChangedEventArgs e)
        {
            //MessageBox.Show(this.radWizard1.SelectedPage.Name);
            if (e.SelectedPage.Name == this.wizardPage2.Name)
                this.radWizard1.NextButton.Enabled = false;
            else
                this.radWizard1.NextButton.Enabled = true;
        }

        private void radGridView1_CellDoubleClick(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
        {
            //FACTURAS f = new FacturasBL().GetById(((FACTURAS)this.radGridViewSelectFactura.CurrentRow.DataBoundItem).ID);
            //if (f.ACTIVO)
            //{
            //    if (f.FECHA_HORA.Date > this.dtpFecha.Value.Date)
            //    {
            //        Comun.ShowInMainMessage("Fecha del documento no puede ser menor a la de la factura.");
            //        this.dtpFecha.Focus();
            //        return;
            //    }

            //    if (this.rdbDevolucion.Checked && (f.FACTURAS_DETALLES.Where(a => a.CANTIDAD <= a.C_DEVUELTA).ToList().Count() == f.FACTURAS_DETALLES.Count))
            //    {
            //        Comun.ShowInMainMessage("Factura está completamente devuelta. No se puede continuar.");
            //        return;
            //    }

            //    decimal diasVijencia = Comun.DateDiff(Comun.DateInterval.Day, f.FECHA_HORA, this.dtpFecha.Value);
            //    if (diasVijencia >= Comun.utilidades.DIAS_MAX_FACT_DEVOLUCIONES && this.rdbDevolucion.Checked)
            //    {
            //        Comun.ShowMessage(string.Format("Esta factura tiene {0:N0} días de antigüedad por tanto no le será calculado el impuesto", diasVijencia), System.Windows.Forms.MessageBoxIcon.Information);
            //        this.calcularITBIS = false;
            //    }
            //    else
            //        this.calcularITBIS = true;
            //    this.LimpiarAdd();
            //    this.bgwGetFactura.RunWorkerAsync();
            //    Comun.ShowLoadingFRM();
            //}
            //else
            //{
            //    Comun.ShowInMainMessage("Factura anulada. No es posible continuar.");
            //    return;
            //}
        }


        private void bgwFindFacturas_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            //decimal i = 0;
            //if (decimal.TryParse(this.txtNroFactura.Text.Trim(), out i))
            //    this.GetFacturas(i);
        }

        private void bgwFindFacturas_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            //Comun.CloseLoadingFRM();
            //if (this.lstFacturas.Count > 0)
            //{
            //    this.radGridViewSelectFactura.DataSource = this.lstFacturas;
            //    this.radGridViewSelectFactura.Focus();
            //}
            //else
            //{
            //    this.entityFactura = null;
            //    this.txtNroFactura.Focus();
            //    this.txtNroFactura.SelectAll();
            //}
        }

        private void radWizard1_Previous(object sender, Telerik.WinControls.UI.WizardCancelEventArgs e)
        {
            //if (this.radWizard1.SelectedPage == this.wizardPage3 || this.radWizard1.SelectedPage == this.wizardPage4)
            //    e.Cancel = true;

            //if (this.rdbDevolucion.Checked && (this.radWizard1.SelectedPage.Name == this.wizardPage3.Name))
            //{
            //    if (this.radGridViewNcDetalle.RowCount > 0)
            //        if (MessageBox.Show("Si retrocede se perderan los datos que ha introducido. ¿Desea continuar?", "Confirmación", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)
            //        {
            //            this.newEntity.NC_DETALLES.Clear();
            //            this.radGridViewNcDetalle.DataSource = this.newEntity.NC_DETALLES.ToList();
            //            this.CalcularTotales();
            //        }
            //        else
            //            return;
            //    e.Cancel = true;
            //    this.radWizard1.SelectedPage = this.wizardPage2;
            //    return;
            //}
            //else if (this.rdbNotaCredito.Checked && this.radWizard1.SelectedPage.Name == this.wizardPage4.Name)
            //{
            //    e.Cancel = true;
            //    this.radWizard1.SelectedPage = this.wizardPage2;
            //    return;
            //}

            //if (this.radWizard1.SelectedPage == this.wizardCompletionPage1)
            //{
            //    e.Cancel = true;
            //    if (rdbDevolucion.Checked)
            //        this.radWizard1.SelectedPage = this.wizardPage3;
            //    else
            //        this.radWizard1.SelectedPage = this.wizardPage4;
            //}
        }

        private void bgwGetFactura_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            //this.entityFactura = new FacturasBL().GetById(((FACTURAS)this.radGridViewSelectFactura.CurrentRow.DataBoundItem).ID);
        }

        private void bgwGetFactura_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            //Comun.CloseLoadingFRM();
            //if (entityFactura.FACTURAS_DETALLES.Count > 0 && this.rdbDevolucion.Checked)
            //{
            //    this.txtCodigo.Items.Clear();
            //    foreach (FACTURAS_DETALLES fd in this.entityFactura.FACTURAS_DETALLES)
            //        this.txtCodigo.Items.Add(fd.PRODUCTOS.CODIGO);
            //}
            //this.radWizard1.SelectNextPage();
        }


        private void radGridViewNcDetalle_UserDeletingRow(object sender, Telerik.WinControls.UI.GridViewRowCancelEventArgs e)
        {
            //this.newEntity.NC_DETALLES.Remove((NC_DETALLES)this.radGridViewNcDetalle.CurrentRow.DataBoundItem);
            //this.CalcularTotales();
        }

        private void radWizard1_Finish(object sender, EventArgs e)
        {
            //this.newEntity.ID = 0;
            //this.newEntity.ID_NCF = this.entityFactura.ID_NCF;
            //this.newEntity.ID_CLIENTE = this.entityFactura.ID_CLIENTE;
            //this.newEntity.ID_FACTURA = this.entityFactura.ID;
            //this.newEntity.ID_VENDEDOR = this.entityFactura.ID_VENDEDOR;
            //this.newEntity.ID_USUARIO = this.entityFactura.ID_USUARIO;
            //this.newEntity.OBSERVACIONES = this.txtObservaciones.Text.Trim();
            //this.newEntity.FECHA = this.dtpFecha.Value;
            //this.newEntity.FACTURAS = this.entityFactura;
            //if (this.rdbDevolucion.Checked)
            //{
            //    this.newEntity.ID_TIPO = 1;
            //    this.newEntity.T_IMPUESTO = decimal.Parse(this.lblTotalImpuestos.Text);
            //    this.newEntity.T_DESCUENTO = decimal.Parse(this.lblTotalDescuento.Text);
            //    this.newEntity.M_TOTAL = decimal.Parse(this.lblTotalGeneral.Text);
            //}
            //else
            //{
            //    this.newEntity.ID_TIPO = 2;
            //    this.newEntity.T_IMPUESTO = 0;
            //    this.newEntity.T_DESCUENTO = 0;
            //    this.newEntity.M_TOTAL = decimal.Parse(this.txtMontoNotaCredito.Text.Trim());
            //}
            //this.backgroundWorker.RunWorkerAsync();
            //Comun.ShowLoadingFRM();
        }

        private void backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            //if (this.newEntity.IsValid())
            //    new NcBL().Insert(this.newEntity);
            //else
            //{
            //    this.entityError = true;
            //    Comun.ShowMessage(newEntity);
            //}
        }

        private void backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            //Comun.CloseLoadingFRM();
            //if (e.Error != null)
            //    Comun.ShowMessage(e.Error);
            //else if (this.entityError)
            //    return;
            //else
            //{
            //    Comun.ShowInMainMessage("Datos guardados correctamente.");
            //    this.DialogResult = System.Windows.Forms.DialogResult.OK;

            //    if (newEntity.ID_TIPO == 1)//Devolucion de mercancia
            //    {
            //        try
            //        {
            //            if (Properties.Settings.Default.NcPrintTo == 0)
            //                new Reportes().PrintDevolucionMercancia(newEntity.ID, true);
            //            else
            //            {
            //                Plantillas.frmReportPreview frm = new Plantillas.frmReportPreview();
            //                frm.crystalReportViewer1.ReportSource = new Reportes().GetDevolucionMercancia(newEntity.ID, true);
            //                // frm.MdiParent = this.MdiParent;
            //                frm.Show();
            //            }
            //        }
            //        catch (Exception ex)
            //        {
            //            Comun.ShowInMainMessage(ex.Message);
            //            Plantillas.frmReportPreview frm = new Plantillas.frmReportPreview();
            //            frm.crystalReportViewer1.ReportSource = new Reportes().GetDevolucionMercancia(newEntity.ID, true);
            //            // frm.MdiParent = this.MdiParent;
            //            frm.Show();
            //        }
            //    }
            //    else// Nota de credito
            //    {
            //        try
            //        {
            //            if (Properties.Settings.Default.NcPrintTo == 0)
            //                new Reportes().PrintNotaCredito(newEntity.ID, true);
            //            else
            //            {
            //                Plantillas.frmReportPreview frm = new Plantillas.frmReportPreview();
            //                frm.crystalReportViewer1.ReportSource = new Reportes().GetNotaCredito(newEntity.ID, true);
            //                // frm.MdiParent = this.MdiParent;
            //                frm.Show();
            //            }
            //        }
            //        catch (Exception ex)
            //        {
            //            Comun.ShowInMainMessage(ex.Message);
            //            Plantillas.frmReportPreview frm = new Plantillas.frmReportPreview();
            //            frm.crystalReportViewer1.ReportSource = new Reportes().GetNotaCredito(newEntity.ID, true);
            //            // frm.MdiParent = this.MdiParent;
            //            frm.Show();
            //        }
            //    }
            //    //((Vistas.frmFacturas)this.Owner).Listar(0);
            //    this.Close();
            //}
        }

        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            //if (this.radGridViewSelectFactura.RowCount == 0)
            //{
            //    e.Cancel = true;
            //    return;
            //}
        }

        private void reImprimirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //if (((FACTURAS)this.radGridViewSelectFactura.CurrentRow.DataBoundItem).ID_CONDICION == 1)
            //{
            //    new Reportes().PrintFacturaCarta(((FACTURAS)this.radGridViewSelectFactura.CurrentRow.DataBoundItem).ID, false);
            //}
            //else
            //{
            //    new Reportes().PrintFacturaTicket(((FACTURAS)this.radGridViewSelectFactura.CurrentRow.DataBoundItem).ID, false);
            //}
        }

        private void verEnPantallaToolStripMenuItem_Click(object sender, EventArgs e)
        {

            //Plantillas.frmReportPreview frm = new Plantillas.frmReportPreview();
            //frm.crystalReportViewer1.ReportSource = new Reportes().GetFacturaCarta(((FACTURAS)this.radGridViewSelectFactura.CurrentRow.DataBoundItem).ID, false);
            //// frm.MdiParent = this.MdiParent;
            //frm.Show();
        }
        #endregion

        private void btnFindClient_Click(object sender, EventArgs e)
        {
            var frm = new Vistas.frmClientes(true);
            if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.cliente = (CLIENTES)frm.radGridView.CurrentRow.DataBoundItem;
                this.txtIdCliente.Text = this.cliente.ID.ToString("0000");
                this.txtCliente.Clear();
                this.txtCliente.AppendText(string.Format("{0}{1}", this.cliente.CLIENTE, Environment.NewLine));
                this.txtCliente.AppendText(string.Format("{0}{1}", this.cliente.RNC, Environment.NewLine));
                this.txtCliente.AppendText(string.Format("{0:N2}{1}", this.cliente.MONTO_ADEUDADO, Environment.NewLine));
            }
        }

        private void btnFindVendor_Click(object sender, EventArgs e)
        {
            var frm = new Busquedas.frmVendedores();
            if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.vendedor = (VENDEDORES)frm.radGridView.CurrentRow.DataBoundItem;
                this.txtIdVendedor.Text = this.vendedor.ID.ToString("0000");
                this.txtVendedor.Text = this.vendedor.VENDEDOR;
            }
        }

        private void btnBuscarFactura_Click(object sender, EventArgs e)
        {
            var frm = new Busquedas.frmFacturasRecibosPagos(this.facturasPendientes);
            if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                foreach (GridViewRowInfo rw in frm.radGridView1.SelectedRows)
                {
                    this.facturasPagar.Add((FACTURAS)rw.DataBoundItem);
                    this.facturasPendientes.Remove((FACTURAS)rw.DataBoundItem);
                }
            }
        }
    }
}
